#ifndef MODBUSHANDLER_H
#define MODBUSHANDLER_H

#include "../DataCollector.h"
#include "../include/modbus/modbus.h"
#include <string>
#include <vector>

// Modbus协议配置结构体
struct ModbusConfig {
    std::string ip_address;    // 设备IP地址
    int port;                  // 端口号，默认502
    int slave_id;              // 从站地址
    int start_address;         // 起始寄存器地址
    int register_count;        // 寄存器数量
    int timeout_ms;            // 超时时间(毫秒)
    int retries;               // 重试次数

    ModbusConfig() : ip_address("192.168.18.190"), port(502), slave_id(1), start_address(40001), register_count(10), timeout_ms(1000), retries(3) {}
};

// Modbus协议处理器
class ModbusHandler : public ProtocolHandler {
private:
    modbus_t* ctx;              // Modbus上下文
    ModbusConfig config;        // Modbus配置
    std::vector<PointData> points; // 测点列表
    bool isConnected;           // 连接状态

    // 初始化测点信息
    void initPoints();

public:
    // 构造函数与析构函数
    ModbusHandler(const ModbusConfig& cfg);
    ~ModbusHandler() override;

    // 协议实现方法
    bool connect(const std::string& configStr) override;
    void disconnect() override;
    std::vector<PointData> readData() override;
    std::string getProtocolName() const override { return "Modbus TCP"; }

    // 设置/获取配置
    void setConfig(const ModbusConfig& cfg) { config = cfg; }
    ModbusConfig getConfig() const { return config; }
};

#endif // MODBUSHANDLER_H